Bank Statement Analysis
Overview
The USA Bank Statement Analysis flow extracts and analyzes information from bank statements, including transaction data, balances, and patterns. It processes the statements to detect potential fraud indicators and provides categorized transaction data along with summary fields.
| Input | Output |
|---|---|
| URL of bank statement document | Extracted transaction data, estimated revenues, information about alternate lenders, account and monthly summaries, balance information, fraud indicators, and summary fields |
End-to-End Async Flow
Follow these steps to complete bank statement analysis:
Step 1. Submit your bank statement parsing request to v1/parseBankStatement and receive a success response, depicting the acceptance of the bank statements
Step 2. Create and set up a webhook endpoint to receive a notification when processing completes
Step 3. Upon webhook notification, call the results API (/getBankStatementParsingResults) to fetch the full parsing output
These steps are detailed below.
Step 1: Parse Bank Statement API
The Parse Bank Statement API submits bank statements for processing.
API URL
https://usa-engine.thomas.hyperverge.co/v1/parseBankStatement
API Endpoint
parseBankStatement
Overview
The Parse Bank Statement API is RESTful and uses standard HTTP verbs and status codes. Requests are in JSON format and responses are in JSON format. This API is now asynchronous and delivers results via a webhook notification followed by a results retrieval API.
Authentication
You need a unique pair of application ID (appId) and application key (appKey) from HyperVerge to verify your identity for accessing the Parse Bank Statement API.
API Request Details
Method - POST
Headers
| Header | Mandatory / Optional | Description | Input Format |
|---|---|---|---|
| content-type | Mandatory | This parameter defines the media type for the request payload | application/json |
| appId | Mandatory | The application identifier shared by HyperVerge. You can find the details in the dashboard's credentials tab | This should be a unique value |
| appKey | Mandatory | The application key shared by HyperVerge. You can find the details in the dashboard's credentials tab | This should be a unique value |
| transactionId | Mandatory | A unique identifier for tracking a user journey | This should be both unique and easily associated with the user's journey in your application(s) |
Inputs
The following table provides the details of the parameters required for the Parse Bank Statement API's request body:
| Parameter | Mandatory / Optional | Type | Description | Input Format | Default Value |
|---|---|---|---|---|---|
bankStatementFiles | Mandatory | array | An array of objects, each containing the URL and ID of a bank statement PDF to be analyzed | Not Applicable | Not Applicable |
bankStatementFiles[].statementUrl | Mandatory | string | The URL of the bank statement PDF | Not Applicable | Not Applicable |
bankStatementFiles[].statementId | Mandatory | string | A unique identifier for the bank statement PDF | Not Applicable | Not Applicable |
bankStatementFiles[].password | Optional | string | The password to decrypt the bank statement PDF if the provided file URL points to an encrypted PDF | Not Applicable | Not Applicable |
merchantId | Optional | string | The unique identifier for the merchant | Not Applicable | Not Applicable |
contractId | Mandatory | string | The unique identifier for the contract | Not Applicable | Not Applicable |
merchantLegalName | Mandatory | string | The legal name of the merchant | Not Applicable | Not Applicable |
merchantDBA | Mandatory | string | The 'Doing Business As' (DBA) name of the merchant | Not Applicable | Not Applicable |
dateOfApplication | Optional | string | The date when the application for cash advance was received | YYYY-MM-DD | Not Applicable |
checkAddress | Optional | string | Parameter to enable address validation. Set to "yes" to validate the provided address, or "no" to skip validation | yes / no | no |
owners | Optional | array | An array of owner objects, each containing details about a business owner | Not Applicable | Not Applicable |
owners[].firstName | Optional | string | The first name of the owner | Not Applicable | Not Applicable |
owners[].lastName | Optional | string | The last name of the owner | Not Applicable | Not Applicable |
owners[].middleName | Optional | string | The middle name of the owner | Not Applicable | Not Applicable |
owners[].fullName | Optional | string | The full name of the owner | Not Applicable | Not Applicable |
businessAddress | Optional | object | The correspondance address of the business | Not Applicable | Not Applicable |
minRequiredMonths | Optional | integer | Minimum number of months (1-12) required for processing. When set to a value N, enables month-based validation to ensure bank statements cover at least the previous N consecutive months. If omitted, no month-based validation is performed. Refer to the Minimum Required Months section below for detailed validation logic | An integer value ranging from 1 to 12 | Not Applicable |
Minimum Required Months
The minRequiredMonths parameter controls month-based validation for bank statements. When set to a value N (1-12), the API performs two types of validation:
- Minimum Coverage Validation: Verifies that the provided bank statements span at least N months of transaction history. If the statements cover fewer than N months, the API returns the error:
"Bank Statement period less than N months". - Consecutive Months Validation: Ensures that the statements include the required N consecutive months preceding the
dateOfApplication. The validation behavior varies based on which day of the month thedateOfApplicationfalls on:- If
dateOfApplicationis on or after the 7th: The API requires statements for the immediately preceding N months.
Example: For a date of application of June 8th with N=3, the API expects statements covering March, April, and May. - If
dateOfApplicationis before the 7th: The validation allows for flexibility in the most recent month. Either of the following will pass validation:- Statements for the immediately preceding N months, or
- Statements for the N months before the most recent month (effectively skipping the last month if its statement is unavailable)
"Last N months Bank statement missing". - If
If minRequiredMonths is omitted, no month-based validation is performed and all provided statements are processed regardless of their date range.
Request
The following code snippet demonstrates a standard curl request for the Parse Bank Statement API:
curl --location --request POST 'https://usa-engine.thomas.hyperverge.co/v1/parseBankStatement' \
--header 'Content-Type: application/json' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId: <Enter_the_HyperVerge_transactionID>' \
--data '{
"bankStatementFiles": [
{
"statementUrl": "<Enter_the_PDF_URL>",
"statementId": "<Enter_the_Statement_ID>",
"password": "<Enter_the_password_if_encrypted>"
},
{
"statementUrl": "<Enter_the_PDF_URL>",
"statementId": "<Enter_the_Statement_ID>",
"password": "<Enter_the_password_if_encrypted>"
}
],
"merchantId": "<Enter_the_Merchant_ID>",
"contractId": "<Enter_the_Contract_ID>",
"merchantLegalName": "<Enter_the_Merchant's_Legal_Name>",
"merchantDBA": "<Enter_the_Merchant's_Business_Name>",
"dateOfApplication": "<Enter_date_of_application_receival>",
"checkAddress" :"<Enter_yes_or_no>",
"owners": [
{
"firstName": "<Enter_owner's_first_name>",
"lastName": "<Enter_owner's_last_name>",
"middleName": "<Enter_owner's_middle_name>",
"fullName": "<Enter_owner's_full_name>"
}
],
"businessAddress": {
"fullAddress": "<Full_correspondance_address_of_the_business>",
"city": "<City_of_correspondance>",
"state": "<State_of_correspondance>",
"zip": "<ZIP>"
},
"minRequiredMonths": <Enter_minimum_required_months> // a number ranging from 1 to 12
}'
Success Response
The Parse Bank Statement API, upon successful execution returns a status code 202, which denotes that the Bank Statements have been accepted. The structure of the response is as follows:
{
"status": "success",
"statusCode": 202,
"result": {
"transactionId": "<transactionId>"
}
}
Use transactionId returned in the response above in subsequent steps. Proceed to set up the webhook to receive completion notifications.
Error Responses
The following are some error responses from the Parse Bank Statement API:
- Input Validation Error
- Missing/Invalid Credentials
{
"status": "failure",
"statusCode": 400,
"message": "Input Validation Error: requires property <missing_parameter>"
}
{
"status": "failure",
"statusCode": 401,
"message": "Missing/Invalid credentials"
}
Error Response Details
A failure or error response contains a failure status with a relevant status code and error message.
The following table lists all error responses:
| Status Code | Error Message | Error Description | Error Resolution |
|---|---|---|---|
| 400 | Input Validation Error | One or more required input properties are missing from the request | Verify and provide all input properties as specified in the Inputs table |
| 401 | Missing/Invalid credentials | The request is either missing the mandatory appId and appKey combination or has invalid values | Verify and provide valid appId and appKey in the request headers. You can find the details in the dashboard's credentials tab |
Step 2: Webhook Setup
To receive notifications when parsing finishes, establish an HTTPS endpoint. The setup is as follows:
Webhook Subscription
Use the following cURL to subscribe to the webhook:
curl --location --request POST 'https://review-api-usa.idv.hyperverge.co/api/v1/config' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'Content-Type: application/json' \
--data '{
"webhookUrl": "<Webhook URL>",
"events": [
"<EVENT_1>",
"<EVENT_2>"
]
}'
Request Parameter Descriptions
| Parameter | Description |
|---|---|
webhookUrl | The URL that would receive the Webhook events |
events | You can subscribe to the following two events:
|
Webhook Payload
When processing completes, a webhook is delivered to your subscribed URL with the following payload structure:
{
"type": "BANK_STATEMENT_PARSED_SUCCESSFULLY",
"timestamp": "2025-10-30T16:10:00Z",
"version": "1.0",
"id": "<uuid>",
"transactionId": "<transactionId>",
"appId": "<your_appId>"
}
Payload Field Descriptions
| Parameter | Description |
|---|---|
metadata | Envelope containing identifiers for the event, including appId and transactionId |
appId | Your HyperVerge application ID |
transactionId | Transaction ID to use when fetching results; identical to the value returned in the Parse Bank Statement API success response |
event | Event details for the webhook notification |
type | Event type: BANK_STATEMENT_PARSED_SUCCESSFULLY or BANK_STATEMENT_PARSING_FAILED, determined by the outcome of bank statement processing |
timestamp | ISO 8601 timestamp when the event was generated |
version | Event schema version |
id | Unique identifier for the event |
After receiving this notification, call the Retrieve Results API with the same transactionId.
Step 3: Retrieve Results API
The Retrieve Results API fetches the detailed parsing result.
API URL
https://usa-engine.thomas.hyperverge.co/v1/getBankStatementParsingResults
API Endpoint
getBankStatementParsingResults
Overview
The Retrieve Results API is RESTful and uses standard HTTP verbs and status codes. Requests are in JSON format and responses are in JSON format. This API is now asynchronous and delivers results via a webhook notification followed by a Results Retrieval API.
Authentication
You need a unique pair of application ID (appId) and application key (appKey) from HyperVerge to verify your identity for accessing the Retrieve Results API.
API Request Details
Method - POST
Headers
| Header | Mandatory / Optional | Description | Input Format |
|---|---|---|---|
| appId | Mandatory | The application identifier shared by HyperVerge. You can find the details in the dashboard's credentials tab | This should be a unique value |
| appKey | Mandatory | The application key shared by HyperVerge. You can find the details in the dashboard's credentials tab | This should be a unique value |
| transactionId | Mandatory | A unique identifier for tracking a user journey | This should be both unique and easily associated with the user's journey in your application(s) |
Request
The following code snippet demonstrates a standard curl request for the Retrieve Results API:
curl --location --request POST 'https://usa-engine.thomas.hyperverge.co/v1/getBankStatementParsingResults' \
--header 'appId: <Enter_the_HyperVerge_appId>' \
--header 'appKey: <Enter_the_HyperVerge_appKey>' \
--header 'transactionId": <Enter_the_TransactionId>' \
--data '{
}'
Success Response
The Retrieve Results API's response is structured across three distinct levels of analysis:
- Statement Level Outputs: The most granular level, represented by the
statementsarray. This level contains detailed information about individual bank statements, including raw transaction data, statement metadata, and fraud checks specific to each statement. - Account Level Outputs: The intermediate level, represented by the
accountSummariesarray. This level aggregates data across all statements for each account, providing account-specific summaries, monthly summaries, estimated revenue, recurring transactions, and possible alternate lenders. - Business Checking Level Outputs: The highest level of aggregation, represented by the
businessCheckingSummaries,businessCheckingRecurringTransactions, andbusinessCheckingPossibleAlternateLendersarrays. This level provides a comprehensive view of the business's financial health, combining data across all accounts to show overall business performance, recurring payment patterns, estimated revenue, and potential alternate lending relationships.
Each level builds upon the previous one, allowing you to analyze the data at different granularities depending on your specific needs.
The following code snippet demonstrates a success response from the Retrieve Results API:
{
"status": "success",
"statusCode": 200,
"result": {
"details": {
"contractId": "<ID>",
"merchantId": "<ID>",
"numberOfBankStatements": 2,
"numberOfMonthsProcessed": 3,
"overallProcessingTime": 3,
"activeAlternateLenders": 2,
"businessCheckingSummaries": [
{
"month": "<Month>",
"year": 2025,
"periodStartDate": "<YYYY-MM-DD>",
"periodEndDate": "<YYYY-MM-DD>",
"periodStartBalance": 1234.55,
"periodEndBalance": 1134.78,
"daysByCalMonth": "<Month>",
"averageDailyBalance": <averagedailybalance>,
"averageTransactionSize": <averagetransactionsize>,
"daysOfNegativeBalance": <daysofnegativebalance>,
"grossDeposits": <grossdeposits>,
"maxDeposit": <maxdeposit>,
"minDeposit": <mindeposit>,
"averageDeposit": <averagedeposit>,
"depositCount": <depositcount>,
"withdrawalCount": <withdrawalcount>,
"maxWithdrawal": <maxwithdrawal>,
"minWithdrawal": <minwithdrawal>,
"averageWithdrawal": <averagewithdrawal>,
"grossWithdrawals": <grosswithdrawals>,
"totalRoundNumberOfTransactions": <totalroundnumberoftransactions>,
"totalRoundNumberTransactionsSum": <totalroundnumbertransactionssum>,
"estimatedRevenue": <estimatedrevenue>,
"totalInterbankTransfers": <totalinterbanktransfers>,
"suspiciousActivity": "<suspiciousactivity>",
"authenticityScore": <authenticityscore>,
"periodBalanceMismatch": "<periodbalancemismatch>"
}
],
"businessCheckingRecurringTransactions": [
{
"firstTxnDate": "<YYYY-MM-DD>",
"latestTxnDate": "<YYYY-MM-DD>",
"totalCountOfInstallments": <totalcountofinstallments>,
"avgDaysInterval": <avgdaysinterval>,
"avgAmount": <Amount>,
"type": "<type>",
"installments": [
{
"amount": <Amount>,
"installmentsCount": <installmentscount>
}
],
"transactions": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRecurringTransaction": true/false,
"isPossibleAlternateLender": true/false
}
]
}
],
"businessCheckingPossibleAlternateLenders": [
{
"lenderName": "<Name>",
"firstTxnDate": "<YYYY-MM-DD>",
"latestTxnDate": "<YYYY-MM-DD>",
"isActive": true/false,
"totalCountOfInstallments": <totalcountofinstallments>,
"avgDaysInterval": <avgdaysinterval>,
"frequency": "<frequency>",
"totalAmountPaid": <Amount>,
"avgAmount": <Amount>,
"type": "<type>",
"installments": [
{
"amount": <Amount>,
"installmentsCount": <installmentscount>
}
],
"transactions": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRecurringTransaction": true/false,
"isPossibleAlternateLender": true/false
}
],
"cashAdvance": {
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRevenue": true/false,
"isPossibleAlternateLender": true/false
}
}
],
"accountSummaries": [
{
"accountNumber": "<accountnumber>",
"accountId": "<ID>",
"accountCategory": "<accountcategory>",
"accountType": "<accounttype>",
"activeAlternateLenders": <activealternatelenders>,
"monthlySummaries": [
{
"month": "<Month>",
"year": <Year>,
"periodStartDate": "<YYYY-MM-DD>",
"periodEndDate": "<YYYY-MM-DD>",
"periodStartBalance": <periodstartbalance>,
"periodEndBalance": <periodendbalance>,
"daysByCalMonth": <Days>,
"averageDailyBalance": <averagedailybalance>,
"averageTransactionSize": <averagetransactionsize>,
"daysOfNegativeBalance": <daysofnegativebalance>,
"grossDeposits": <grossdeposits>,
"maxDeposit": <maxdeposit>,
"minDeposit": <mindeposit>,
"averageDeposit": <averagedeposit>,
"depositCount": <depositcount>,
"withdrawalCount": <withdrawalcount>,
"maxWithdrawal": <maxwithdrawal>,
"minWithdrawal": <minwithdrawal>,
"averageWithdrawal": <averagewithdrawal>,
"grossWithdrawals": <grosswithdrawals>,
"totalRoundNumberOfTransactions": <totalroundnumberoftransactions>,
"totalRoundNumberTransactionsSum": <totalroundnumbertransactionssum>,
"estimatedRevenue": <estimatedrevenue>,
"totalInterbankTransfers": <totalinterbanktransfers>,
"suspiciousActivity": "<suspiciousactivity>",
"authenticityScore": <authenticityscore>,
"periodBalanceMismatch": "<periodbalancemismatch>"
}
],
"transactions": {
"withdrawals": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isPossibleAlternateLender": true/false,
"isRecurringTransaction": true/false
}
],
"deposits": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRevenue": true/false,
"isPossibleAlternateLender": true/false
}
]
},
"recurringTransactions": [
{
"firstTxnDate": "<YYYY-MM-DD>",
"latestTxnDate": "<YYYY-MM-DD>",
"totalCountOfInstallments": <totalcountofinstallments>,
"avgDaysInterval": <avgdaysinterval>,
"avgAmount": <Amount>,
"type": "<type>",
"installments": [
{
"amount": <Amount>,
"installmentsCount": <installmentscount>
}
],
"transactions": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRecurringTransaction": true/false,
"isPossibleAlternateLender": true/false
}
]
}
],
"possibleAlternateLenders": [
{
"lenderName": "<Name>",
"firstTxnDate": "<YYYY-MM-DD>",
"latestTxnDate": "<YYYY-MM-DD>",
"isActive": true/false,
"totalCountOfInstallments": <totalcountofinstallments>,
"avgDaysInterval": <avgdaysinterval>,
"frequency": "<frequency>",
"totalAmountPaid": <Amount>,
"avgAmount": <Amount>,
"type": "<type>",
"installments": [
{
"amount": <Amount>,
"installmentsCount": <installmentscount>
}
],
"transactions": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRecurringTransaction": true/false,
"isPossibleAlternateLender": true/false
}
],
"cashAdvance": {
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRevenue": true/false,
"isPossibleAlternateLender": true/false
}
}
],
"interbankTransactions": {
"withdrawals": "<withdrawals>",
"deposits": "<deposits>"
}
}
],
"statements": [
{
"fileName": "<Name>",
"statementId": "<ID>",
"numberOfPages": "<numberofpages>",
"bankName": "<Name>",
"processingStatus": "<processingstatus>",
"pdfType": "<pdftype>",
"statementProcessingTime": "<statementprocessingtime>",
"isValidUsBankStatement": "<isvalidusbankstatement>",
"accounts": [
{
"accountNumber": "<accountnumber>",
"accountType": "<accounttype>",
"statementSummary": {
"periodStartDate": "<YYYY-MM-DD>",
"periodEndDate": "<YYYY-MM-DD>",
"periodStartBalance": <periodstartbalance>,
"periodEndBalance": <periodendbalance>,
"averageDailyBalance": <averagedailybalance>,
"averageTransactionSize": <averagetransactionsize>,
"daysOfNegativeBalance": <daysofnegativebalance>,
"grossDeposits": <grossdeposits>,
"maxDeposit": <maxdeposit>,
"minDeposit": <mindeposit>,
"averageDeposit": <averagedeposit>,
"depositCount": <depositcount>,
"withdrawalCount": <withdrawalcount>,
"maxWithdrawal": <maxwithdrawal>,
"minWithdrawal": <minwithdrawal>,
"averageWithdrawal": <averagewithdrawal>,
"grossWithdrawals": <grosswithdrawals>,
"totalRoundNumberOfTransactions": <totalroundnumberoftransactions>,
"totalRoundNumberTransactionsSum": <totalroundnumbertransactionssum>,
"suspiciousActivity": "<suspiciousactivity>",
"authenticityScore": <authenticityscore>,
"periodBalanceMismatch": "<periodbalancemismatch>"
},
"transactions": {
"withdrawals": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isPossibleAlternateLender": true/false,
"isRecurringTransaction": true/false
}
],
"deposits": [
{
"amount": <Amount>,
"description": "<Description>",
"txnDate": "<YYYY-MM-DD>",
"txnId": "<ID>",
"isRevenue": true/false,
"isPossibleAlternateLender": true/false,
"isRecurringTransaction": true/false
}
]
}
}
],
"fraudChecks": {
"businessNameMismatch": true/false,
"businessOwnerNameMismatch": true/false,
"businessAddressMismatch": true/false,
"periodBalanceMismatch": true/false,
"pdfCreationDateAnomaly": true/false,
"fingerprintAnomaly": true/false,
"pdfTemplateAnomaly": true/false,
"pdfSourceAnomaly": true/false,
"bankRoutingNumberAnomaly": true/false,
"metadataAnomaly": true/false,
"contentOverlapAnomaly": true/false,
"textTampering": {
"accountNumber": true/false,
"accountOwner": true/false,
"accountType": true/false,
"address": true/false,
"transactionAmount": true/false,
"transactionDate": true/false
}
}
}
]
},
"summary": {
"action": "",
"details": []
}
}
}
Success Response Details
The following table details all response parameters. The main arrays in the response are highlighted.
businessCheckingSummaries: Contains monthly summaries for all the checking accounts of a businessbusinessCheckingRecurringTransactions: Contains recurring transaction patterns across all the checking accounts of a businessbusinessCheckingPossibleAlternateLenders: Contains information about potential alternate lenders for all the checking accounts of a businessaccountSummaries: Contains detailed summaries for each accountstatements: Contains raw statement data and fraud checks
The following table outlines the details of the success response from the Retrieve Results API:
| Parameter | Type | Description |
|---|---|---|
| status | string | Status of the API response |
| statusCode | number | HTTP status code of the response |
| result | object | Main result object containing the response data |
| details | object | Main response object containing all data |
| contractId | string | Unique Contract ID assigned to the application which contains the input bank statements |
| merchantId | string | Unique Merchant ID assigned to the merchant applying for cash advance |
| numberOfBankStatements | number | Total number of PDF bank statements sent in the input |
| numberOfMonthsProcessed | number | Total number of months for which particular bank statement has accounted details |
| overallProcessingTime | number | Total processing time across bank statements shared in seconds |
| activeAlternateLenders | array | Array of active alternate lenders identified with active installments |
| businessCheckingSummaries | ||
| businessCheckingSummaries | array | Array of business checking summary objects |
| businessCheckingSummaries.month | string | Name of the month or which monthly summary is listed |
| businessCheckingSummaries.year | number | Calendar year of month for which monthly summary is listed |
| businessCheckingSummaries.periodStartDate | string | Start date of the period (YYYY-MM-DD format) |
| businessCheckingSummaries.periodEndDate | string | End date of the period (YYYY-MM-DD format) |
| businessCheckingSummaries.periodStartBalance | number | Combined account balance at the start of the period |
| businessCheckingSummaries.periodEndBalance | number | Combined account balance at the end of the period |
| businessCheckingSummaries.daysByCalMonth | string | Number of days in the calendar month |
| businessCheckingSummaries.averageDailyBalance | number | Average daily balance |
| businessCheckingSummaries.averageTransactionSize | number | Average transaction size |
| businessCheckingSummaries.daysOfNegativeBalance | number | Unique days with negative balance in any of the business checking accounts |
| businessCheckingSummaries.grossDeposits | number | Sum of total deposit transaction values in the period |
| businessCheckingSummaries.maxDeposit | number | Maximum deposit amount |
| businessCheckingSummaries.minDeposit | number | Minimum deposit amount |
| businessCheckingSummaries.averageDeposit | number | Average deposit amount |
| businessCheckingSummaries.depositCount | number | Total number of deposits |
| businessCheckingSummaries.withdrawalCount | number | Total number of withdrawals |
| businessCheckingSummaries.maxWithdrawal | number | Maximum withdrawal amount |
| businessCheckingSummaries.minWithdrawal | number | Minimum withdrawal amount |
| businessCheckingSummaries.averageWithdrawal | number | Average withdrawal transaction value across business checking accounts in the month |
| businessCheckingSummaries.grossWithdrawals | number | Sum of total withdrawal transaction values in the period |
| businessCheckingSummaries.totalRoundnumberOfTransactions | number | Total number of round number transactions |
| businessCheckingSummaries.totalRoundnumberTransactionsSum | number | Sum of all round number transactions |
| businessCheckingSummaries.estimatedRevenue | number | Total value of all revenue category transactions in the month |
| businessCheckingSummaries.totalInterbankTransfers | number | Total number of interbank transfers (to and from) |
| businessCheckingSummaries.suspiciousActivity | string | Indicates if suspicious activity(fraud indictaor) was detected |
| businessCheckingSummaries.authenticityScore | number | Score indicating the authenticity of the data |
| businessCheckingSummaries.periodBalanceMismatch | string | Indicates whether there is a mismatch between balance calculated based on transactions and balance recorded during the period |
| businessCheckingRecurringTransactions | ||
| businessCheckingRecurringTransactions | array | Array of recurring transactions for business checking accounts |
| businessCheckingRecurringTransactions.firstTxnDate | string | Date of first transaction (YYYY-MM-DD) in the series of recurring transactions |
| businessCheckingRecurringTransactions.latestTxnDate | string | Date of latest transaction (YYYY-MM-DD) in the series of recurring transactions |
| businessCheckingRecurringTransactions.totalCountOfInstallments | number | Total number of installments in the series of recurring transactions |
| businessCheckingRecurringTransactions.avgDaysInterval | number | Average number of days between two installments in the series |
| businessCheckingRecurringTransactions.avgAmount | number | Average value of transaction in the series |
| businessCheckingRecurringTransactions.type | string | Type of recurring transaction (withdrawl/deposit) |
| businessCheckingRecurringTransactions.installments | object | Object containing installment data |
| installments | array | Array of installment objects |
| installments.amount | number | Value of amount of the installment |
| installments.installmentsCount | number | Number of installments with the specific installment amount as value |
| businessCheckingRecurringTransactions.transactions | object | Object containing transaction data |
| businessCheckingRecurringTransactions.transactions. | array | Array of transaction objects |
| transactions.amount | number | Value of the transaction |
| transactions.description | string | Description of the transaction |
| transactions.txnDate | string | Transaction date (YYYY-MM-DD) |
| transactions.txnId | string | Unique transaction identifier |
| transactions.isRecurringTransaction | boolean | Indicates whether the given transaction is part of a series of recurrent transactions |
| transactions.isPossibleAlternateLender | boolean | Indicates whether the transaction has been identified as a transaction with an alternate lender |
| businessCheckingPossibleAlternateLenders | ||
| businessCheckingPossibleAlternateLenders | array | Array of possible alternate lenders for business checking accounts |
| businessCheckingPossibleAlternateLenders. | object | Individual possible alternate lender object |
| businessCheckingPossibleAlternateLenders.lenderName | string | Name of the lender identified using transaction description |
| businessCheckingPossibleAlternateLenders.firstTxnDate | string | Date of first transaction (YYYY-MM-DD) with the lender |
| businessCheckingPossibleAlternateLenders.latestTxnDate | string | Date of latest transaction (YYYY-MM-DD) with the lender |
| businessCheckingPossibleAlternateLenders.isActive | boolean | Indicates if the lender is active with the lender |
| businessCheckingPossibleAlternateLenders.totalCountOfInstallments | number | Total number of installments paid to the lender |
| businessCheckingPossibleAlternateLenders.avgDaysInterval | number | Average days between transactions |
| businessCheckingPossibleAlternateLenders.frequency | string | Transaction payout frequency |
| businessCheckingPossibleAlternateLenders.totalAmountPaid | number | Total amount paid to the lender |
| businessCheckingPossibleAlternateLenders.avgAmount | number | Average transaction amount |
| businessCheckingPossibleAlternateLenders.type | string | Type of transaction |
| businessCheckingPossibleAlternateLenders.installments | object | Object containing installment data |
| businessCheckingPossibleAlternateLenders.installments. | array | Array of installment objects |
| accountSummaries | ||
| accountSummaries | array | Array of account summary objects |
| accountSummaries. | object | Individual account summary object |
| accountSummaries.accountnumber | string | Bank Account Number |
| accountSummaries.accountId | string | Unique account identifier If sub-account number is present in the statement: Last 2 digits of account number (XY) + Last 2 digits sub account number (AB) + Bank name in the format XYAB-Bank Name. If sub-account number is not present in the statement: Last 4 digits of account number (VWXY) + Bank name in the format VWXY-Bank Name |
| accountSummaries.accountCategory | string | Category of the account (Business/Personal) |
| accountSummaries.accountType | string | Type of the account (Savings/Checkings) |
| accountSummaries.activeAlternateLenders | number | Number of active alternate lenders identified with active installments |
| accountSummaries.monthlySummaries | object | Object containing monthly summary data |
| accountSummaries.monthlySummaries. | array | Array of monthly summary objects |
| accountSummaries.monthlySummaries.month | string | Name of month for which monthly summary is listed |
| accountSummaries.monthlySummaries.year | number | Calendar year of month for which monthly summary is listed |
| accountSummaries.monthlySummaries.periodStartDate | string | Start date of the period (YYYY-MM-DD) |
| accountSummaries.monthlySummaries.periodEndDate | string | End date of the period (YYYY-MM-DD) |
| accountSummaries.monthlySummaries.periodStartBalance | number | Account balance at the start of the period |
| accountSummaries.monthlySummaries.periodEndBalance | number | Account balance at the end of the period |
| accountSummaries.monthlySummaries.daysByCalMonth | number | Number of calendar days with transactions with the account in the period |
| accountSummaries.monthlySummaries.averageDailyBalance | number | Value of average daily balance in the in the account in the period |
| accountSummaries.monthlySummaries.averageTransactionSize | number | Value of average transaction size in the period |
| accountSummaries.monthlySummaries.daysOfNegativeBalance | number | Number of days with negative balance in the account |
| accountSummaries.monthlySummaries.grossDeposits | number | Sum of total deposit transaction values in the period |
| accountSummaries.monthlySummaries.maxDeposit | number | Value of maximum deposit in the period |
| accountSummaries.monthlySummaries.minDeposit | number | Value of minimum deposit in the period |
| accountSummaries.monthlySummaries.averageDeposit | number | Average deposit transaction value in the month |
| accountSummaries.monthlySummaries.depositCount | number | Total number of deposits |
| accountSummaries.monthlySummaries.withdrawalCount | number | Total number of withdrawals |
| accountSummaries.monthlySummaries.maxWithdrawal | number | Maximum withdrawal amount |
| accountSummaries.monthlySummaries.minWithdrawal | number | Minimum withdrawal amount |
| accountSummaries.monthlySummaries.averageWithdrawal | number | Average withdrawal amount |
| accountSummaries.monthlySummaries.grossWithdrawals | number | Sum of total withdrawal transaction values in the month |
| accountSummaries.monthlySummaries.totalRoundnumberOfTransactions | number | Total number of transactions where the amount is a whole number |
| accountSummaries.monthlySummaries.totalRoundnumberTransactionsSum | number | Sum of all round number transactions |
| accountSummaries.monthlySummaries.estimatedRevenue | number | Estimated revenue |
| accountSummaries.monthlySummaries.totalInterbankTransfers | number | Count of number of transactions to and from a different bank in the period |
| accountSummaries.monthlySummaries.suspiciousActivity | string | Indicates if suspicious activity or fraud indicators were detected |
| accountSummaries.monthlySummaries.authenticityScore | number | Score indicating the authenticity of the data |
| accountSummaries.monthlySummaries.periodBalanceMismatch | string | Indicates whether there is a mismatch between balance calculated based on transactions and balance recorded |
| accountSummaries.transactions | object | Object containing transaction data |
| accountSummaries.transactions.withdrawals | object | Object containing withdrawal transactions |
| accountSummaries.transactions.withdrawals. | array | Array of withdrawal transaction objects |
| accountSummaries.transactions.withdrawls.amount | number | Withdrawal amount |
| accountSummaries.transactions.withdrawls.description | string | Withdrawal description |
| accountSummaries.transactions.withdrawls.txnDate | string | Transaction date (YYYY-MM-DD) |
| accountSummaries.transactions.withdrawls.txnId | string | Unique transaction identifier |
| accountSummaries.transactions.withdrawls.isPossibleAlternateLender | boolean | Indicates whether the transaction has been identified as a transaction with an alternate lender |
| accountSummaries.transactions.withdrawls.isRecurringTransaction | boolean | Indicates whether the given transaction is part of a series of recurrent transactions |
| accountSummaries.transactions.deposits | object | Object containing deposit transactions |
| accountSummaries.transactions.deposits. | array | Array of deposit transaction objects |
| accountSummaries.transactions.deposits.amount | number | Deposit amount |
| accountSummaries.transactions.deposits.description | string | Deposit description |
| accountSummaries.transactions.deposits.txnDate | string | Transaction date (YYYY-MM-DD) |
| accountSummaries.transactions.deposits.txnId | string | Unique transaction identifier |
| accountSummaries.transactions.deposits.isRevenue | string | Indicates whether the transaction has been identified as revenue |
| accountSummaries.transactions.deposits.isPossibleAlternateLender | string | Indicates whether the transaction has been identified as a transaction with an alternate lender |
| accountSummaries.recurringTransactions | object | Object containing recurring transaction data |
| accountSummaries.recurringTransactions. | array | Array of recurring transaction objects |
| accountSummaries.recurringTransactions.firstTxnDate | string | Date of first transaction (YYYY-MM-DD) with the lender |
| accountSummaries.recurringTransactions.latestTxnDate | string | Date of latest transaction (YYYY-MM-DD) with the lender |
| accountSummaries.recurringTransactions.totalCountOfInstallments | number | Total number of installments in the series of recurring transactions |
| accountSummaries.recurringTransactions.avgDaysInterval | number | Average days between transactions |
| accountSummaries.recurringTransactions.avgAmount | number | Average transaction amount |
| accountSummaries.recurringTransactions.type | string | Type of recurring transaction |
| accountSummaries.recurringTransactions.installments | object | Object containing installment data |
| accountSummaries.recurringTransactions.installments. | array | Array of installment objects |
| accountSummaries.recurringTransactions.installments..amount | number | Installment amount |
| accountSummaries.recurringTransactions.installments..installmentsCount | number | number of installments |
| accountSummaries.recurringTransactions.transactions | object | Object containing transaction data |
| accountSummaries.recurringTransactions.transactions. | array | Array of transaction objects |
| accountSummaries.recurringTransactions.transactions.amount | number | Transaction amount |
| accountSummaries.recurringTransactions.transactions.description | string | Transaction description |
| accountSummaries.recurringTransactions.transactions.txnDate | string | Transaction date (YYYY-MM-DD) |
| accountSummaries.recurringTransactions.transactions.txnId | string | Unique transaction identifier |
| accountSummaries.recurringTransactions.transactions.isRecurringTransaction | string | Indicates if this is a recurring transaction |
| accountSummaries.recurringTransactions.transactions.isPossibleAlternateLender | string | Indicates if this is a possible alternate lender transaction |
| accountSummaries.possibleAlternateLenders | object | Object containing possible alternate lender data |
| accountSummaries.possibleAlternateLenders. | array | Array of possible alternate lender objects |
| accountSummaries.possibleAlternateLenders.lenderName | string | Name of the lender |
| accountSummaries.possibleAlternateLenders.firstTxnDate | string | Date of first transaction (YYYY-MM-DD) |
| accountSummaries.possibleAlternateLenders.latestTxnDate | string | Date of latest transaction (YYYY-MM-DD) |
| accountSummaries.possibleAlternateLenders.isActive | string | Indicates if the lender is active |
| accountSummaries.possibleAlternateLenders.totalCountOfInstallments | number | Total number of installments |
| accountSummaries.possibleAlternateLenders.avgDaysInterval | number | Average days between transactions |
| accountSummaries.possibleAlternateLenders.frequency | string | Transaction frequency |
| accountSummaries.possibleAlternateLenders.totalAmountPaid | number | Total amount paid to the lender |
| accountSummaries.possibleAlternateLenders.avgAmount | number | Average transaction amount |
| accountSummaries.possibleAlternateLenders.type | string | Type of transaction |
| accountSummaries.possibleAlternateLenders.installments | object | Object containing installment data |
| accountSummaries.possibleAlternateLenders.installments. | array | Array of installment objects |
| accountSummaries.possibleAlternateLenders.installments..amount | number | Installment amount |
| accountSummaries.possibleAlternateLenders.installments..installmentsCount | number | number of installments |
| accountSummaries.possibleAlternateLenders.transactions | object | Object containing transaction data |
| accountSummaries.possibleAlternateLenders.transactions. | array | Array of transaction objects |
| accountSummaries.possibleAlternateLenders.transactions.amount | number | Transaction amount |
| accountSummaries.possibleAlternateLenders.transactions.description | string | Transaction description |
| accountSummaries.possibleAlternateLenders.transactions.txnDate | string | Transaction date (YYYY-MM-DD) |
| accountSummaries.possibleAlternateLenders.transactions.txnId | string | Unique transaction identifier |
| accountSummaries.possibleAlternateLenders.transactions.isRecurringTransaction | string | Indicates if this is a recurring transaction |
| accountSummaries.possibleAlternateLenders.transactions.isPossibleAlternateLender | string | Indicates if this is a possible alternate lender transaction |
| accountSummaries.possibleAlternateLenders.cashAdvance | object | Object containing cash advance data |
| accountSummaries.possibleAlternateLenders.cashAdvance.amount | number | Cash advance amount |
| accountSummaries.possibleAlternateLenders.cashAdvance.description | string | Cash advance description |
| accountSummaries.possibleAlternateLenders.cashAdvance.txnDate | string | Cash advance date (YYYY-MM-DD) |
| accountSummaries.possibleAlternateLenders.cashAdvance.txnId | string | Unique transaction identifier |
| accountSummaries.possibleAlternateLenders.cashAdvance.isRevenue | string | Indicates if this is a revenue transaction |
| accountSummaries.possibleAlternateLenders.cashAdvance.isPossibleAlternateLender | string | Indicates if this is a possible alternate lender transaction |
| accountSummaries.interbankTransactions | object | Object containing interbank transaction data |
| accountSummaries.interbankTransactions.withdrawals | string | Withdrawal transactions |
| accountSummaries.interbankTransactions.deposits | string | Deposit transactions |
| statements | ||
| statements | array | Array of statement objects |
| statements | object | Individual statement object |
| statements.fileName | string | The file name of the bank statement PDF |
| statements.statementId | number | The statementIdthat was passed in the request |
| statements.numberOfPages | number | number of pages in the statement |
| statements.bankName | number | Name of the bank whose accounts are present in the statement |
| statements.processingStatus | string | Status of the statement processing request. Values: Processed, Not Processed, or failed. failed indicates the PDF was not identified as a valid US bank statement |
| statements.pdfType | string | Type of the PDF (Native/Scanned) |
| statements.statementProcessingTime | number | Time taken to process and analyse the statement in seconds |
| statements.isValidUsBankStatement | boolean | Whether the PDF was classified as a valid US bank statement. true when the statement is valid; false when the upload was not identified as a valid US bank statement |
| statements.accounts | array | Array of account objects |
| statements.accounts. | object | Individual account object |
| statements.accounts.accountnumber | string | Bank Account Number |
| statements.accounts.accountType | string | Type of the account (Savings/Checkings) |
| statements.accounts.statementSummary | object | Summary of the statement |
| statements.accounts.statementSummary.authenticityScore | number | Score indicating the authenticity of the data |
| statements.accounts.statementSummary.averageDailyBalance | string | Average daily balance |
| statements.accounts.statementSummary.averageDeposit | number | Average deposit amount |
| statements.accounts.statementSummary.averageTransactionSize | number | Average transaction size |
| statements.accounts.statementSummary.averageWithdrawal | number | Average withdrawal amount |
| statements.accounts.statementSummary.daysOfNegativeBalance | number | number of days with negative balance |
| statements.accounts.statementSummary.depositCount | number | Total number of deposits |
| statements.accounts.statementSummary.grossDeposits | number | Total gross deposits |
| statements.accounts.statementSummary.grossWithdrawals | number | Total gross withdrawals |
| statements.accounts.statementSummary.maxDeposit | number | Maximum deposit amount |
| statements.accounts.statementSummary.maxWithdrawal | number | Maximum withdrawal amount |
| statements.accounts.statementSummary.minDeposit | number | Minimum deposit amount |
| statements.accounts.statementSummary.minWithdrawal | number | Minimum withdrawal amount |
| statements.accounts.statementSummary.periodBalanceMismatch | string | Indicates if there is a balance mismatch in the period |
| statements.accounts.statementSummary.periodEndBalance | number | Balance at the end of the period |
| statements.accounts.statementSummary.periodEndDate | string | End date of the period (YYYY-MM-DD format) |
| statements.accounts.statementSummary.periodStartDate | string | Start date of the period (YYYY-MM-DD format) |
| statements.accounts.statementSummary.suspiciousActivity | string | Indicates if suspicious activity was detected |
| statements.accounts.statementSummary.totalRoundnumberOfTransactions | number | Total number of round number transactions |
| statements.accounts.statementSummary.totalRoundnumberTransactionsSum | number | Sum of all round number transactions |
| statements.accounts.statementSummary.withdrawalCount | number | Total number of withdrawals |
| statements.accounts.transactions | object | Object containing transaction data |
| statements.accounts.transactions.deposits | array | Array of deposit transactions |
| statements.accounts.transactions.deposits. | object | Individual deposit transaction object |
| statements.accounts.transactions.deposits.amount | number | Deposit amount |
| statements.accounts.transactions.deposits.description | string | Deposit description |
| statements.accounts.transactions.deposits.txnDate | string | Transaction date (YYYY-MM-DD) |
| statements.accounts.transactions.deposits.txnId | string | Unique transaction identifier |
| statements.accounts.transactions.deposits.isRevenue | boolean | Indicates whether the transaction has been identified as revenue |
| statements.accounts.transactions.deposits.isPossibleAlternateLender | boolean | Indicates whether the transaction has been identified as a transaction with an alternate lender |
| statements.accounts.transactions.deposits.isRecurringTransaction | boolean | Indicates whether the given transaction is part of a series of recurring transactions |
| statements.accounts.transactions.withdrawals | array | Array of withdrawal transactions |
| statements.accounts.transactions.withdrawals. | object | Individual withdrawal transaction object |
| statements.accounts.transactions.withdrawals.amount | number | Withdrawal amount |
| statements.accounts.transactions.withdrawals.description | string | Withdrawal description |
| statements.accounts.transactions.withdrawals.txnDate | string | Transaction date (YYYY-MM-DD) |
| statements.accounts.transactions.withdrawals.txnId | string | Unique transaction identifier |
| statements.accounts.transactions.withdrawals.isRecurringTransaction | boolean | Indicates if this is a recurring transaction |
| statements.accounts.transactions.withdrawals.isPossibleAlternateLender | boolean | Indicates if this is a possible alternate lender transaction |
| statements.bankName | string | Name of the bank |
| statements.statementId | string | The unique statement ID that was passed in the reuqest |
| statements.fraudChecks | object | Object containing fraud check data |
| statements.fraudChecks.businessNameMismatch | boolean | Indicates if the business name on the bank statement does not match the name provided in the input |
| statements.fraudChecks.businessOwnerNameMismatch | boolean | Indicates if the business owner's name on the bank statement differs from the name in input |
| statements.fraudChecks.businessAddressMismatch | boolean | Indicates if the business address on the bank statement differs from the address in input |
| statements.fraudChecks.contentOverlapAnomaly | boolean | Detects instances where images, text or numerical values overlap, which could indicate forgery or manipulation |
| statements.fraudChecks.fingerprintAnomaly | boolean | Verifies if the document has a unique and valid fingerprint, ensuring authenticity |
| statements.fraudChecks.metadataAnomaly | boolean | Analyzes the metadata of the document for anomalies such as inconsistent creation or modification timestamps |
| statements.fraudChecks.pdfCreationDateAnomaly | boolean | Indicates if there is a PDF creation date anomaly |
| statements.fraudChecks.pdfSourceAnomaly | boolean | Identifies if the PDF was processed using untrusted or suspicious tools such as "ilovepdf" or similar online document editors |
| statements.fraudChecks.bankRoutingnumberAnomaly | boolean | Indicates if there is a bank routing number anomaly |
| statements.fraudChecks.pdfTemplateAnomaly | boolean | Detects if the document matches a known fraudulent or manipulated bank statement template |
| statements.fraudChecks.periodBalanceMismatch | boolean | Indicates if there is a mismatch between balance calculated based on transactions and balance recorded |
| statements.fraudChecks.textTampering | object | Object containing list of specific fields in the statement with suspected tampering flag based on font/template/spacing inconsistencies |
| statements.fraudChecks.textTampering.accountnumber | boolean | Indicates if there is text tampering in the Bank Account Number |
| statements.fraudChecks.textTampering.accountOwner | boolean | Indicates if there is text tampering in the account owner details |
| statements.fraudChecks.textTampering.accountType | boolean | Indicates if there is text tampering in the account type |
| statements.fraudChecks.textTampering.address | boolean | Indicates if there is text tampering in the address |
| statements.fraudChecks.textTampering.transactionAmount | boolean | Indicates if there is text tampering in the transaction amount |
| statements.fraudChecks.textTampering.transactionDate | boolean | Indicates if there is text tampering in the transaction date |
Errors Responses
The following errors may be returned by the Retrieve Results API:
- No Files Downloadable
- Files Could Not Be Opened
- Invalid Password
- Missing Transaction ID
{
"status": "failure",
"statusCode": 400,
"message": "No files downloadable"
}
{
"status": "failure",
"statusCode": 400,
"message": "Files could not be opened"
}
{
"status": "failure",
"statusCode": 400,
"message": "Invalid password"
}
{
"status": "failure",
"statusCode": 400,
"message": "TransactionId not found"
}
- Invalid US Bank Statements
- Bank Statement period less than N months
- Last N months Bank Statement missing
{
"status": "failure",
"statusCode": 422,
"message": "No valid US Bank Statements found"
}
{
"status": "failure",
"statusCode": 422,
"message": "Bank Statement period less than N months"
}
{
"status": "failure",
"statusCode": 422,
"message": "Last N months Bank statement missing"
}
Error Response Details
A failure or error response contains a failure status with a relevant status code and error message.
The following table lists all error responses:
| Status Code | Error Message | Error Description | Error Resolution |
|---|---|---|---|
| 400 | No files downloadable | The provided bank statement URLs could not be downloaded | Verify that the URLs are accessible and publicly available, or retry the request after some time |
| 400 | Files could not be opened | The bank statement files could not be opened or processed | Ensure the files are valid PDFs and not corrupted. Retry the request with valid files |
| 400 | Invalid password | The provided password for encrypted PDF is incorrect | Provide the correct password for the encrypted PDF or remove the password parameter if the PDF is not encrypted |
| 400 | TransactionId not found | The provided transactionId does not exist or has not been processed yet | Verify the transactionId and ensure the Parse Bank Statement API has been called successfully. Wait for processing to complete if the request was recently submitted |
| 422 | No valid US Bank Statements found | None of the uploaded PDFs were identified as valid US bank statements | Ensure at least one of the provided files is a valid US bank statement PDF. Verify the file format and content |
| 422 | Bank Statement period less than N months | This error occurs when minRequiredMonths is set to N and the provided bank statements cover fewer than N months of transaction history. The transaction history spans less than N months. | Provide bank statements that cover at least N months of transaction history, where N is the value specified in minRequiredMonths |
| 422 | Last N months Bank statement missing | This error occurs when minRequiredMonths is set to N and the previous N consecutive months relative to dateOfApplication are not covered. Refer to the Minimum Required Months section for detailed understanding of this error | Include statements for the required N consecutive months based on dateOfApplication. If the date of application is on or after the 7th of the month, include the immediate last N months. If before the 7th, you can include either the immediate last N months or the N months prior to the last month (if the last month's statement is unavailable) |
| 500 | Internal Server Error | An internal server error occurred. Please contact the HyperVerge team for resolution | Retry the request after some time or contact the HyperVerge team if the issue persists |